home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / docs / asm_guide / assembler course / 10.s < prev    next >
Text File  |  1989-08-31  |  2KB  |  92 lines

  1.  
  2. ; the final example for this time is a coloured bar which moves up
  3. ; and down on the screen. This is done like the previous example,
  4. ; except we make 2 waitlines in the copperlist, and change the color
  5. ; from black to white and back to black. We change the position of
  6. ; both waitcommands, so they move over the screen. When they reach
  7. ; the bottom, we change the direction and when they reach the top,
  8. ; we change it again...
  9. ; try to expand this little demo, that you get more lines moving,
  10. ; or change colors, or anything !! have fun & courage !!!
  11.  
  12.  
  13.  
  14. top:    movem.l    d0-d7/a0-a6,-(a7)
  15.  
  16.     move.l    $4,a6        ; start of execlib
  17.  
  18.     move.l    #libname,a1    ; open the gfxlibrary...
  19.     jsr    -408(a6)    ; 
  20.     move.l    d0,gfxbase    ; store the result
  21.  
  22.                 ; start our own copperlist:
  23.     move.w    #%0000001110100000,$dff096
  24.     move.l    #copperlist,$dff080
  25.     clr.w    $dff088
  26.     move.w    #%1000001010000000,$dff096
  27.  
  28.     
  29. ;-------------------------------  the mainroutine of the demo
  30.  
  31. loop:    bsr    waitvblank
  32.  
  33.     bsr    movethebar
  34.  
  35.     btst    #6,$bfe001    ; wellknown wait-for-click
  36.     bne.s    loop
  37.  
  38. ;------------------------------- end of the mainroutine
  39.  
  40.     move.l    gfxbase,a6        ; restore the old cpprlist
  41.     move.l    38(a6),$dff080        ;
  42.     clr.w    $dff088            ;
  43.     move.w    #%1000001111100000,$dff096
  44.  
  45.     move.l    $4,a6            ; close gfxlib
  46.     move.l    gfxbase,a1
  47.     jsr    -414(a6)
  48.  
  49.     movem.l    (a7)+,d0-d7/a0-a6
  50.     rts
  51.  
  52. ;------------------------------- subroutines
  53.  
  54. waitvblank:
  55.     cmp.b    #0,$dff006
  56.     bne.s    waitvblank
  57.     rts
  58.  
  59. ;-------------------------------
  60.  
  61. movethebar:
  62.     move.b    direction,d0
  63.     add.b    d0,line1
  64.     add.b    d0,line2
  65. test1:    cmp.b    #$40,line1        ; bar reached top ?
  66.     bne.s    test2            ; seems not !
  67.     move.b    #1,direction
  68. test2:    cmp.b    #$ff,line2        ; bar reached bottom ?
  69.     bne.s    endtest            ; no !
  70.     move.b    #-1,direction
  71. endtest:rts
  72.  
  73. ;-------------------------------
  74.  
  75. direction:    dc.b    1    ; we add 'direction' to the 
  76.         even        ; current position of the bar.
  77.                 ; direction can be 1 or -1...
  78.  
  79. libname:    dc.b    "graphics.library",0
  80.         even
  81. gfxbase:    dc.l    0    ; reserve a longword for the
  82.                 ; start of the library    
  83.  
  84. copperlist:
  85.         dc.l    $01800000
  86. line1:        dc.l    $500ffffe
  87.         dc.l    $01800fff
  88. line2:        dc.l    $600ffffe
  89.         dc.l    $01800000
  90.         dc.l    $fffffffe    ; end of copperlist
  91.  
  92.